package com.idlecode.config.template;

import cn.hutool.core.util.StrUtil;
import com.idlecode.statics.*;
import com.idlecode.util.JsonUtil;
import com.idlecode.util.StreamUtil;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;
import java.util.List;

/**
 * 代码生成配置内容
 */
public class GeneratorConfig {
    private static String template = "/template";


    public GeneratorInfo getGeneratorConfig(List<String> selectedGenFileItems, String codeFormat) throws ServerException {
        // 模板路径，如果不是以/结尾，则添加/
        if (!StrUtil.endWith(template, '/')) {
            template = template + "/";
        }
        // 模板配置文件
        InputStream configInputStream = this.getClass().getResourceAsStream(template + "config.json");

        if (configInputStream == null) {
            throw new ServerException("模板配置文件，config.json不存在");
        }

        try {
            // 读取模板配置文件
            String configContent = StreamUtil.copyToString(configInputStream, StandardCharsets.UTF_8);
            GeneratorInfo generator = JsonUtil.parseObject(configContent, GeneratorInfo.class);

            if ("格式一".equals(codeFormat)) {
                generator.setTemplates(TemplateInfo1Util.getTemplates(selectedGenFileItems));
                generator.getProject().setCodeBasePath(TemplateInfo1Util.codeBasePath);
            } else if ("格式一.1".equals(codeFormat)) {
                generator.setTemplates(TemplateInfo1_1Util.getTemplates(selectedGenFileItems));
                generator.getProject().setCodeBasePath(TemplateInfo1_1Util.codeBasePath);
            } else if ("格式二".equals(codeFormat)) {
                generator.setTemplates(TemplateInfo2Util.getTemplates(selectedGenFileItems));
                generator.getProject().setCodeBasePath(TemplateInfo2Util.codeBasePath);
            } else if ("格式三".equals(codeFormat)) {
                generator.setTemplates(TemplateInfo3Util.getTemplates(selectedGenFileItems));
                generator.getProject().setCodeBasePath(TemplateInfo3Util.codeBasePath);
            } else {
                generator.setTemplates(TemplateInfo4Util.getTemplates(selectedGenFileItems));
                generator.getProject().setCodeBasePath(TemplateInfo4Util.codeBasePath);
            }

            for (TemplateInfo templateInfo : generator.getTemplates()) {
                // 模板文件
                InputStream isTemplate = this.getClass().getResourceAsStream(template + templateInfo.getTemplateName());
                if (isTemplate == null) {
                    throw new ServerException("模板文件 " + templateInfo.getTemplateName() + " 不存在");
                }
                // 读取模板内容
                String templateContent = StreamUtil.copyToString(isTemplate, StandardCharsets.UTF_8);

                templateInfo.setTemplateContent(templateContent);
            }
            return generator;
        } catch (IOException e) {
            throw new ServerException("读取config.json配置文件失败");
        }
    }

}
